#ifndef __LINK_NODE_H_
#define __LINK_NODE_H_

#include<vector>

template <typename T>
struct linkNode
{
    T val;
    linkNode *next;
    // linkNode(int val):val(val),next(nullptr){}
    linkNode(): val(0), next(nullptr) {}
    linkNode(T x) : val(x), next(nullptr) {}
    linkNode(T x, linkNode *next) : val(x), next(next) {}
};

template <typename T>
class linkList
{
private:
    linkNode<T>* lst;
public:
    linkList();
    linkList(T val);
    linkList(std::vector<T> &vec);

    linkNode<T>* GetList(){
        return lst;
    }

    void addNodeAtHead(T val);
    void addNode(T val);
    linkNode<T>* localRvsList();
    linkNode<T>* headRvsList();
    linkNode<T>* iterRvsList();
    void showList();
    ~linkList();
};

template class linkList<int>;
template class linkList<double>;
template class linkList<long>;
template class linkList<float>;
template class linkList<short>;
#endif